import { exportToExcel, exportMultiSheetExcel, exportTableToExcel } from './xlsxTemp.js';

/**
 * 简化的 Excel 导出工具类
 */
class ExcelExporter {
  /**
   * 基础导出方法
   * @param {Array} data - 数据数组
   * @param {string} fileName - 文件名
   * @param {Object} customHeaders - 自定义表头 { 原字段名: '显示名称' }
   */
  static export(data, fileName = '数据导出', customHeaders = {}) {
    return exportToExcel(data, {
      fileName: fileName,
      headers: customHeaders,
      autoWidth: true
    });
  }

  /**
   * 导出指定列
   * @param {Array} data - 数据数组
   * @param {Array} columns - 要导出的列名数组
   * @param {string} fileName - 文件名
   * @param {Object} customHeaders - 自定义表头
   */
  static exportColumns(data, columns, fileName = '数据导出', customHeaders = {}) {
    return exportToExcel(data, {
      fileName: fileName,
      columns: columns,
      headers: customHeaders,
      autoWidth: true
    });
  }

  /**
   * 导出多个工作表
   * @param {Array} sheets - 工作表数据 [{ name: '工作表名', data: [...] }]
   * @param {string} fileName - 文件名
   */
  static exportMultiSheet(sheets, fileName = '数据导出') {
    return exportMultiSheetExcel(sheets, fileName);
  }

  /**
   * 从 HTML 表格导出
   * @param {string|HTMLElement} tableSelector - 表格选择器或元素
   * @param {string} fileName - 文件名
   */
  static exportTable(tableSelector, fileName = '表格导出') {
    return exportTableToExcel(tableSelector, fileName);
  }
}

// 常用的快捷方法
export const quickExport = {
  /**
   * 用户数据导出
   * @param {Array} users - 用户数据
   * @param {string} fileName - 文件名
   */
  users: (users, fileName = '用户数据') => {
    return ExcelExporter.exportColumns(
      users,
      ['id', 'name', 'email', 'phone', 'createTime'],
      fileName,
      {
        id: '用户ID',
        name: '姓名',
        email: '邮箱',
        phone: '手机号',
        createTime: '创建时间'
      }
    );
  },

  /**
   * 订单数据导出
   * @param {Array} orders - 订单数据
   * @param {string} fileName - 文件名
   */
  orders: (orders, fileName = '订单数据') => {
    return ExcelExporter.exportColumns(
      orders,
      ['orderNo', 'userName', 'amount', 'status', 'createTime'],
      fileName,
      {
        orderNo: '订单号',
        userName: '用户名',
        amount: '金额',
        status: '状态',
        createTime: '下单时间'
      }
    );
  },

  /**
   * 财务数据导出
   * @param {Array} financial - 财务数据
   * @param {string} fileName - 文件名
   */
  financial: (financial, fileName = '财务数据') => {
    return ExcelExporter.exportColumns(
      financial,
      ['date', 'type', 'amount', 'balance', 'remark'],
      fileName,
      {
        date: '日期',
        type: '类型',
        amount: '金额',
        balance: '余额',
        remark: '备注'
      }
    );
  }
};

// 页面中使用的便捷函数
export const pageExportUtils = {
  /**
   * 处理按钮点击导出
   * @param {Array} data - 数据
   * @param {string} fileName - 文件名
   * @param {Object} options - 选项
   */
  handleExportClick: async (data, fileName, options = {}) => {
    if (!data || data.length === 0) {
      alert('没有数据可以导出');
      return false;
    }

    try {
      // 显示加载提示
      const loadingTip = options.showLoading !== false;
      if (loadingTip) {
        console.log('正在导出，请稍候...');
      }

      const success = await ExcelExporter.export(data, fileName, options.headers);
      
      if (success) {
        if (loadingTip) {
          console.log('导出成功！');
        }
      } else {
        alert('导出失败，请重试');
      }
      
      return success;
    } catch (error) {
      console.error('导出异常:', error);
      alert('导出失败：' + error.message);
      return false;
    }
  },

  /**
   * 批量导出（多个数据源）
   * @param {Object} dataSources - 数据源 { '工作表名': 数据数组 }
   * @param {string} fileName - 文件名
   */
  batchExport: async (dataSources, fileName = '批量数据导出') => {
    const sheets = Object.entries(dataSources).map(([name, data]) => ({
      name,
      data
    }));

    try {
      const success = await ExcelExporter.exportMultiSheet(sheets, fileName);
      if (success) {
        console.log('批量导出成功！');
      } else {
        alert('批量导出失败，请重试');
      }
      return success;
    } catch (error) {
      console.error('批量导出异常:', error);
      alert('批量导出失败：' + error.message);
      return false;
    }
  }
};

export default ExcelExporter; 